package com.fdb.efp.nls.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.fdb.basic.framework.core.base.AbstractFrameworkService;
import com.fdb.basic.framework.core.base.DataOptionalAuthorityDao;
import com.fdb.basic.framework.core.base.FrameworkService;
import com.fdb.basic.framework.core.util.DateTool;
import com.fdb.efp.nls.common.RiskwarningConstant;
import com.fdb.efp.nls.service.dao.*;
import com.fdb.efp.nls.service.domain.PspCheckTaskApp;
import com.fdb.efp.nls.service.domain.PspCheckTaskHis;
import com.fdb.efp.nls.service.facade.PspCheckTaskAppService;
import com.fdb.efp.nls.service.vo.PspCheckTaskAppVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * <p>ServiceImpl: 检查任务申请表				<p>
 * @author chenqm1
 * @date 2018-05-03
 */
@Service("pspCheckTaskAppService")
public class PspCheckTaskAppServiceImpl extends AbstractFrameworkService implements PspCheckTaskAppService, FrameworkService {
	
	private static final List<PspCheckTaskAppVO> list = null;

	private static Logger logger = LoggerFactory.getLogger(PspCheckTaskAppServiceImpl.class);

	@Autowired
	private PspCheckTaskAppDao pspCheckTaskAppDao;
	@Autowired
	private PspCheckTaskHisDao pspCheckTaskHisDao;
	@Autowired
	private PspBillListDao pspBillListDao;
	@Autowired
	private PspWarnInfoDao pspWarnInfoDao;
	@Autowired
	private PspGuarInfoDao pspGuarInfoDao;
	/**
	 * 新增操作
	 */
	public PspCheckTaskAppVO insertPspCheckTaskApp(PspCheckTaskAppVO inPspCheckTaskAppVo) {
		logger.debug("当前新增数据为:"+ inPspCheckTaskAppVo.toString());
		int num = 0;
		PspCheckTaskAppVO result = null;
		try {
			PspCheckTaskApp pspCheckTaskApp = new PspCheckTaskApp();
			beanCopy(inPspCheckTaskAppVo, pspCheckTaskApp);
			num = pspCheckTaskAppDao.insertPspCheckTaskApp(pspCheckTaskApp);
			result = new PspCheckTaskAppVO();
			beanCopy(pspCheckTaskApp, result);
		} catch (Exception e) {
			logger.error("新增数据发生异常!", e);
			//num = -1;
		}
		logger.debug("当前新增数据条数为:"+ num);
		return result;
	}

	/**
	 * 删除操作
	 */
	public int deleteByPk(PspCheckTaskAppVO inPspCheckTaskAppVo) {
		logger.debug("当前删除数据条件为:"+ inPspCheckTaskAppVo);
		int num = 0;
		try {
			PspCheckTaskApp pspCheckTaskApp = new PspCheckTaskApp();
			beanCopy(inPspCheckTaskAppVo, pspCheckTaskApp);
			String bizSerno=pspCheckTaskApp.getBizSerno();
			PspCheckTaskApp pspCheckTask=pspCheckTaskAppDao.queryByPk(pspCheckTaskApp);
			String chkState=pspCheckTask.getChkState();
			if(chkState.equals(RiskwarningConstant.STD_ZB_CHK_STATE_00)) {
				num = pspCheckTaskAppDao.deleteByPk(pspCheckTaskApp);
				if(num>=1) {
					pspBillListDao.deleteByPk(bizSerno);
					pspWarnInfoDao.deleteByPk(bizSerno);
					pspGuarInfoDao.deleteByPk(bizSerno);
				}
			}
		} catch (Exception e) {
			logger.error("删除数据发生异常!", e);
			num = -1;
		}
		logger.debug("根据条件:"+ inPspCheckTaskAppVo +"删除的数据条数为"+ num);
		return num;
	}


	/**
	 * 更新操作
	 */
	public int updateByPk(PspCheckTaskAppVO inPspCheckTaskAppVo) {
		logger.debug("当前修改数据为:"+ inPspCheckTaskAppVo.toString());
		int num = 0;
		try {
			PspCheckTaskApp pspCheckTaskApp = new PspCheckTaskApp();
			beanCopy(inPspCheckTaskAppVo, pspCheckTaskApp);
			pspCheckTaskApp.setTaskProId(inPspCheckTaskAppVo.getCreateUser());//任务分配人
			pspCheckTaskApp.setTaskProBrId(inPspCheckTaskAppVo.getOrgCode());//任务分配机构
			num = pspCheckTaskAppDao.updateByPk(pspCheckTaskApp);
		} catch (Exception e) {
			logger.error("修改数据发生异常!", e);
			num = -1;
		}
		logger.debug("根据条件:"+ inPspCheckTaskAppVo +"修改的数据条数为"+ num);
		return num;
	}
	
	/**
	 * 查询操作
	 */
	public PspCheckTaskAppVO queryByPk(PspCheckTaskAppVO inPspCheckTaskAppVo) {
		
		logger.debug("当前查询参数信息为:"+ inPspCheckTaskAppVo);
		try {
			PspCheckTaskApp queryPspCheckTaskApp = new PspCheckTaskApp();
			beanCopy(inPspCheckTaskAppVo, queryPspCheckTaskApp);
			PspCheckTaskApp queryRslPspCheckTaskApp = pspCheckTaskAppDao.queryByPk(queryPspCheckTaskApp);
			if (Objects.nonNull(queryRslPspCheckTaskApp)) {
				PspCheckTaskAppVO outPspCheckTaskAppVo = beanCopy(queryRslPspCheckTaskApp, new PspCheckTaskAppVO());
				logger.debug("当前查询结果为:"+ outPspCheckTaskAppVo.toString());
				return outPspCheckTaskAppVo;
			} else {
				logger.debug("当前查询结果为空!");
			}
		} catch (Exception e) {
			logger.error("查询数据发生异常!", e);
		}
		return null;
	}


	/**
	 * 查询用户权限数据
	 */
	@SuppressWarnings("unchecked")
	public List<PspCheckTaskAppVO> queryAllOwner(PspCheckTaskAppVO pspCheckTaskAppVo) {

		logger.debug("当前查询本人所属数据信息的参数信息为:");
		PspCheckTaskApp pspCheckTaskApp = beanCopy(pspCheckTaskAppVo, new PspCheckTaskApp());
		List<PspCheckTaskAppVO> list = null;
		try {
			List<PspCheckTaskApp> pspCheckTaskApps = pspCheckTaskAppDao.queryAllOwnerByPage(pspCheckTaskApp);
			logger.debug("当前查询本人所属数据信息的结果集数量为:"+ pspCheckTaskApps.size());
			pageSet(pspCheckTaskApps, pspCheckTaskApp);
			list = (List<PspCheckTaskAppVO>) beansCopy(pspCheckTaskApps, PspCheckTaskAppVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		
		return list;
	
	}


	/**
	 * 查询当前机构权限数据
	 */
	@SuppressWarnings("unchecked")
	public List<PspCheckTaskAppVO> queryAllCurrOrg(PspCheckTaskAppVO pspCheckTaskAppVo) {

		logger.debug("当前查询本人所属机构数据信息的参数信息为:");
		PspCheckTaskApp pspCheckTaskApp = beanCopy(pspCheckTaskAppVo, new PspCheckTaskApp());
		List<PspCheckTaskApp> pspCheckTaskApps = pspCheckTaskAppDao.queryAllCurrOrgByPage(pspCheckTaskApp);
		logger.debug("当前查询本人所属机构数据信息的结果集数量为:"+pspCheckTaskApps.size());
		List<PspCheckTaskAppVO> list = null;
		try {
			pageSet(pspCheckTaskApps, pspCheckTaskApp);
			list = (List<PspCheckTaskAppVO>) beansCopy(pspCheckTaskApps, PspCheckTaskAppVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		
		return list;
	
	}


	/**
	 * 查询当前机构及下属机构权限数据
	 */
	@SuppressWarnings("unchecked")
	public List<PspCheckTaskAppVO> queryAllCurrDownOrg(PspCheckTaskAppVO pspCheckTaskAppVo) {

		logger.debug("当前查询本人所属机构及以下数据信息的参数信息为:");
		PspCheckTaskApp pspCheckTaskApp = beanCopy(pspCheckTaskAppVo, new PspCheckTaskApp());
		List<PspCheckTaskApp> pspCheckTaskApps = pspCheckTaskAppDao.queryAllCurrDownOrgByPage(pspCheckTaskApp);
		logger.debug("当前查询本人所属机构及以下数据信息的结果集数量为:"+ pspCheckTaskApps.size());
		List<PspCheckTaskAppVO> list = null;
		try {
			pageSet(pspCheckTaskApps, pspCheckTaskApp);
			list = (List<PspCheckTaskAppVO>) beansCopy(pspCheckTaskApps, PspCheckTaskAppVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		
		return list;
	
	}


	@Override
	public int submitByPk(PspCheckTaskAppVO inPspCheckTaskAppVo) {
		int num = 0;
		int num1 = 0;
		try {
			PspCheckTaskApp pspCheckTaskApp = new PspCheckTaskApp();
			PspCheckTaskHis pspCheckTaskHis = new PspCheckTaskHis();
			inPspCheckTaskAppVo.setTaskProId(inPspCheckTaskAppVo.getCreateUser());//任务分配人
			inPspCheckTaskAppVo.setTaskProBrId(inPspCheckTaskAppVo.getOrgCode());//任务分配机构
			inPspCheckTaskAppVo.setRealFinDate(inPspCheckTaskAppVo.getCreateTime());//实际完成日期
			inPspCheckTaskAppVo.setChkState(RiskwarningConstant.STD_ZB_CHK_STATE_09);
			beanCopy(inPspCheckTaskAppVo, pspCheckTaskApp);
			beanCopy(inPspCheckTaskAppVo, pspCheckTaskHis);
			num = pspCheckTaskHisDao.insertPspCheckTaskHis(pspCheckTaskHis);
			if(num>0) {
				pspCheckTaskApp.setLastUpdateTime(DateTool.getCurrentDateTime());
				pspCheckTaskApp.setLastUpdateUser(inPspCheckTaskAppVo.getHdlNo()); //最后更新人
				num1 = pspCheckTaskAppDao.updateByPk(pspCheckTaskApp);
			}
		} catch (Exception e) {
			logger.error("修改数据发生异常!", e);
			num = -1;
		}
		return num1;
	}

	@Override
	public List<PspCheckTaskAppVO> queryAllListByCusId() {
		List<PspCheckTaskAppVO> list = null;
		try {
			List<PspCheckTaskApp> pspCheckTaskApps = pspCheckTaskAppDao.queryAllListByCusId();
			logger.debug("当前查询本人所属数据信息的结果集数量为:"+ pspCheckTaskApps.size());
			list = (List<PspCheckTaskAppVO>) beansCopy(pspCheckTaskApps, PspCheckTaskAppVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		return list;
	
	}

	@Override
	public int insertBatchPspCheckTaskApp(List<PspCheckTaskAppVO> list) {
		logger.info("批量新增参数："+JSONObject.toJSONString(list));
		List<PspCheckTaskApp> paramList = new ArrayList<PspCheckTaskApp>();
		int num = 0;
		try {
			paramList = (List<PspCheckTaskApp>) beansCopy(list, PspCheckTaskApp.class);
			num = pspCheckTaskAppDao.insertBatchPspCheckTaskApp(paramList);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
			num= -1;
		}
		return num;
	}

	@Override
	public List<String> queryContNo() {
		List<String> contList= pspCheckTaskAppDao.queryContList();
		logger.debug("当前查询未结清合同号的结果集数量为:"+ contList.size());
		return contList ;
	}

	@Override
	public DataOptionalAuthorityDao getDataAuthorityDao() {
		return this.pspCheckTaskAppDao;
	}

	/**
	 * 新增修改
	 */
	@Override
	public int insertOrUpdateByPk(PspCheckTaskAppVO pspCheckTaskAppVO){
		logger.debug("当前修改数据为："+pspCheckTaskAppVO.toString());
		int num =0;
		try{
			PspCheckTaskApp pspCheckTaskApp=new PspCheckTaskApp();
			beanCopy(pspCheckTaskAppVO,pspCheckTaskApp);
			num=pspCheckTaskAppDao.insertOrUpdateByPk(pspCheckTaskApp);
		} catch (Exception e){
			logger.error("修改数据发生异常！",e);
			num=-1;
		}
		logger.debug("根据条件："+pspCheckTaskAppVO+"修改的数据条数为"+num);
		return num;
	}

	public List<PspCheckTaskAppVO> queryByTaskNo(String chkTaskNo){
		List<PspCheckTaskAppVO> list = null;
		logger.debug("当前查询参数信息为:"+ chkTaskNo);
		try {
			List<PspCheckTaskApp> qs = pspCheckTaskAppDao.queryByTaskNo(chkTaskNo);
			if (qs.size()>0) {
				logger.debug("当前查询本人所属数据信息的结果集数量为:"+ qs.size());
				list = (List<PspCheckTaskAppVO>) beansCopy(qs, PspCheckTaskAppVO.class);
				return list;
			} else {
				logger.debug("当前查询结果为空!");
			}
		} catch (Exception e) {
			logger.error("查询数据发生异常!", e);
		}
		return null;
	}

	public List<PspCheckTaskAppVO> queryByConditions(String chkTaskNo, String cusId, String certCode){
		List<PspCheckTaskAppVO> list = null;
		logger.debug("当前查询参数信息为："+ chkTaskNo + "," + cusId +"," + certCode);
		try {
			List<PspCheckTaskApp> qs = pspCheckTaskAppDao.queryByConditions(chkTaskNo,cusId,certCode);
			if (qs.size()>0) {
				logger.debug("当前查询本人所属数据信息的结果集数量为:"+ qs.size());
				list = (List<PspCheckTaskAppVO>) beansCopy(qs, PspCheckTaskAppVO.class);
				return list;
			} else {
				logger.debug("当前查询结果为空!");
			}
		} catch (Exception e) {
			logger.error("查询数据发生异常!", e);
		}
		return null;
	}
}
